//package ntd.util.frame.task.handle.msg;
//
//import cn.hutool.core.thread.ThreadUtil;
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.db.Entity;
//import cn.hutool.log.StaticLog;
//import lombok.SneakyThrows;
//import ntd.task.Task;
//import ntd.task.bo.TaskInfo;
//import ntd.util.config.common.enums.msg.EnumMsgState;
//import ntd.util.frame.data.factory.FactoryData;
//import com.c.opt.tool.ToolEntity;
//import ntd.util.frame.data.tool.ToolMysql;
//import ntd.util.frame.msg.MsgHandle;
//import ntd.util.frame.msg.service.context.MsgContext;
//import ntd.util.modular.function.entity.ChannelBusiness;
//import ntd.util.modular.function.util.UtilChannelBusiness;
//import ntd.util.modular.msg.entity.Msg;
//
//import java.sql.SQLException;
//import java.util.List;
//
//public class SmsSendTask implements Task {
//
//
//    public Boolean handle() {
//        StaticLog.info("开始执行消息发送功能......");
//        // 查询所有待发送短信
//        ToolMysql toolMysql = new ToolMysql(FactoryData.dataSource());
//        List<Msg> msgList = null;
//        try {
//            msgList = toolMysql.db.findAll(Entity.create("message_msg").set("state", "WAIT_SEND"), Msg.class);
//        } catch (SQLException e) {
//            throw new RuntimeException(e);
//        }
//
//        for (Msg msg : msgList) {
//            if (ObjectUtil.isNull(msg.getChannelBusinessId())) {
//                continue;
//            }
//            // 初始化
//            MsgContext msgContext = init(msg);
//            if (ObjectUtil.isNull(msgContext)) {
//                continue;
//            }
//            try {
//                // 调用消息发送
//                MsgHandle msgHandle = msg.getEnumMsgHandle().getMsgHandle();
//                msgHandle.handle(msgContext);
//                // 更新消息状态
//                msg.setState(EnumMsgState.SEND_SUCCESS);
//                toolMysql.db.upsert(ToolEntity.toEntity(msg).setTableName("message_msg"), "id");
//            } catch (Exception e) {
//                e.printStackTrace();
//                // 更新消息状态
//                msg.setState(EnumMsgState.SEND_ERROR);
//                try {
//                    toolMysql.db.upsert(ToolEntity.toEntity(msg).setTableName("message_msg"), "id");
//                } catch (SQLException ex) {
//                    throw new RuntimeException(ex);
//                }
//            }
//            // 延迟两秒执行（短信接口调用频次调整）
//            ThreadUtil.sleep(1000);
//        }
//        StaticLog.info("执行消息发送功能完成......");
//        return Boolean.TRUE;
//    }
//
//    private MsgContext init(Msg msg) {
//        ChannelBusiness channelBusiness = UtilChannelBusiness.getById(msg.getChannelBusinessId());
//        if (ObjectUtil.isNull(channelBusiness)) {
//            return null;
//        }
//        return MsgContext.init(msg, channelBusiness);
//    }
//
//    @Override
//    public TaskInfo info() {
//        return new TaskInfo("任务-短信消息发送", "task-sms-send", new SmsSendTask());
//    }
//
//    @Override
//    public void execute(Object o) {
//        handle();
//    }
//}
